package com.naiking.manager
{
	import com.naiking.ui.BaseTipBar;
	import com.naiking.data.HashMap;
	import com.naiking.data.enum.AlignType;
	import com.naiking.interfaces.ITipBar;
	
	import flash.display.DisplayObject;
	import flash.events.MouseEvent;
	import flash.utils.getQualifiedClassName;
	

	/**
	 * @author Nai.King
	 * 创建时间：2013-9-24 下午7:03:56
	 * 
	 */
	public class TipManager
	{
		private static var _info:String;
		private static var _tipBar:BaseTipBar=new BaseTipBar();
		private static var _map:HashMap=new HashMap(); 
		/**
		 *从模版数据中得到加工后的tip 
		 * @param templateStr 数据含有$1开头的 如：用户$1获得$2经验
		 * @param argFill 取代$+数字  的内容的[“tom”,999]
		 * @return 
		 * 
		 */		
		public static function getTipFromTemplate(templateStr:String,argFill:Array):String
		{
			if(argFill)
			{
				for(var i:int=0;i<argFill.length;i++)
				{
					templateStr=templateStr.replace("$"+(i+1),argFill[i]);
				}
			}
			return templateStr;	
		}
		/**
		 *给显示对象加tip 可以加动态的 只加到相同parent级别 
		 * @param data 若isDynamic==true时 data任意
		 * @param dis
		 * @param alignType
		 * @param offsetX
		 * @param offsetY
		 * @param isDynamic
		 * @param getTipFun
		 * @param param
		 * 
		 */		
		public static function addTip(data:String,
									  dis:DisplayObject,
									  alignType:String=AlignType.ALIGN_RIGHT,
									  offsetX:int=0,
									  offsetY:int=0,
									  isDynamic:Boolean=false,
									  getTipFun:Function=null,
									  param:Object=null):void
		{
			if(_map.containsKey(dis))
			{
				trace("重复注册tip被拒绝");
				return;
			}
			_map.add(dis,true);
			dis.addEventListener(MouseEvent.ROLL_OVER,function():void
			{
				if(isDynamic)
				{
					if(param)
					{
						data=getTipFun(param);
					}else
					{
						data=getTipFun();
					}
					
				}
				_tipBar.data=data;
				dis.parent.addChild(_tipBar);
				switch(alignType)
				{
					case AlignType.ALIGN_RIGHT:
						_tipBar.x=dis.x+dis.width+offsetX;
						_tipBar.y=dis.y+offsetY;
						break;
					case AlignType.ALIGN_LEFT:
						_tipBar.x=dis.x-_tipBar.width-offsetX;
						_tipBar.y=dis.y+offsetY;
						break;
					case AlignType.ALIGN_TOP:
						_tipBar.x=dis.x+offsetX;
						_tipBar.y=dis.y-_tipBar.height-offsetY;
						break;
					case AlignType.ALIGN_BOTTOM:
						_tipBar.x=dis.x+offsetX;
						_tipBar.y=dis.y+dis.height+offsetY;
						break;
				}
			});
			
			dis.addEventListener(MouseEvent.ROLL_OUT,function():void
			{
				if(_tipBar.parent)
					_tipBar.parent.removeChild(_tipBar);
			});
		}	
		//dis.addEventListener(MouseEvent.ROLL_OVER,onShowTip);
	
		public function TipManager()
		{
		}
	}
}